package com.zhang.goods.vo;

import com.zhang.brand.entity.Brand;
import com.zhang.common.model.SkuEsModel;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

@Data
public class SkuSearchResultVO {

    private List<SkuListModel> skuListModels;

    /**
     * 总记录数
     */
    private int total;

    private int pages;

    /**
     * 品牌列表（用于前端筛选条件）
     */
    private List<Brand> brands = new ArrayList<>();

    /**
     * 属性值集合（用于前端筛选条件)
     */
    private List<AttrVO> attrValues;


    public SkuSearchResultVO(List<SkuEsModel> skuEsModels) {
        this.skuListModels = skuEsModels.stream().map(item -> {
//            准备sku的数据
            SkuListModel skuListModel = new SkuListModel();
            BeanUtils.copyProperties(item, skuListModel);
//       准备品牌列表的数据  此处需要保证品牌的唯一,因为每个sku都有存储品牌，他们有些都是一个品牌，会导致有重复数据
            /*方法一：可以在品牌类中手动声明hash值，再利用hashSet集合的特性来去掉重复
             * 方法二：手动遍历集合每一个值判断是否有重复的*/
            boolean flag = true;
            for (Brand brand : brands) {
                if (item.getBrandId().equals(brand.getId())) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                Brand brand = new Brand();
                brand.setId(item.getBrandId());
                brand.setName(item.getBrandName());
                brand.setLogo(item.getBrandImg());
                brands.add(brand);
            }
//            准备属性值数据
            attrValues = item.getAttrs().stream().map(attrs -> {
                AttrVO attrVO = new AttrVO();
                attrVO.setAttrId(attrs.getAttrId());
                attrVO.setAttrName(attrs.getAttrName());
                return attrVO;
            }).collect(Collectors.toList());
            return skuListModel;
        }).collect(Collectors.toList());
    }

    @Data
    static class SkuListModel {
        private Long skuId;
        private String skuTitle;
        private BigDecimal skuPrice;
        private Long skuDefaultImg;
        private Boolean hasStock;
    }

    @Data
    public static class AttrVO {
        private Long attrId;
        private String attrName;
        private List<String> attrValues;
    }
}
